package com.sojson.project.sys.dict.service.impl;

import java.io.IOException;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sojson.enums.core.EDelFlagStatus;
import com.sojson.project.query.entity.bo.Select;
import com.sojson.project.sys.dict.dao.DictDataDao;
import com.sojson.project.sys.dict.dao.DictTypeDao;
import com.sojson.project.sys.dict.entity.dto.DictTypeDto;
import com.sojson.project.sys.dict.entity.dto.DictTypePageDto;
import com.sojson.project.sys.dict.entity.po.DictType;
import com.sojson.project.sys.dict.entity.vo.DictTypeVo;
import com.sojson.project.sys.dict.service.DictTypeService;
import com.sojson.util.DictUtil;

/**
 * 字典类型表Service实现类
 * 
 * @author liu
 * @date 2022-09-07
 */
@Service
public class DictTypeServiceImpl extends ServiceImpl<DictTypeDao, DictType> implements DictTypeService {

    @Resource
    private DictTypeDao dictTypeDao;
    @Resource
    private DictDataDao dictDataDao;

    /**
     * 列表查询
     * 
     * @param dto
     * @return
     */
    @Override
    public List<DictTypeVo> list(DictTypeDto dto) {
        List<DictTypeVo> list = dictTypeDao.list(dto);
        return list;
    }

    /**
     * 分页查询
     * 
     * @param dto
     * @return
     */
    @Override
    public List<DictTypeVo> page(DictTypePageDto dto) {
        List<DictTypeVo> page = dictTypeDao.page(dto);
        return page;
    }

    /**
     * 通过id查询
     * 
     * @param id
     * @return
     */
    @Override
    public DictTypeVo findById(String id) {
        return dictTypeDao.findById(id);
    }

    /**
     * 通过对象删除
     * 
     * @param dto
     * @return
     */
    @Override
    public boolean removeByDto(DictTypeDto dto) {
        dictTypeDao.removeByDto(dto);
        return true;
    }

    /**
     * 通过id列表删除
     * 
     * @param ids
     * @return
     * @throws IOException 
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean removeByIds(List<String> ids) throws IOException {
        // 查询所有code
        List<String> codes = dictTypeDao.findCodeByIds(ids);

        // 删除所有字典值
        dictDataDao.removeByCodes(codes, EDelFlagStatus.YES.getCode());

        // 删除所有字典
        dictTypeDao.deleteBatchIds(ids);

        // 更新缓存
        if (codes != null && codes.size() > 0) {
            DictUtil.del(codes);
        }
        return true;
    }

    /**
     * 清空数据
     * 
     * @return
     */
    @Override
    public boolean clear() {
        dictTypeDao.clear();
        return true;
    }

    /**
     * 查询下拉列表
     * 
     * @param dto
     * @return
     */
    @Override
    public List<Select> findSelect(DictTypeDto dto) {
        return dictTypeDao.findSelect(dto);
    }

    /**
     * 查询code列表
     * 
     * @param dto
     * @return
     */
    @Override
    public List<String> findCodeByDto(DictTypeDto dto) {
        return dictTypeDao.findCodeByDto(dto);
    }

}